package com.mk.node;

import static org.junit.Assume.assumeTrue;

import java.io.File;
import java.io.IOException;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import com.mk.pojo.User;
import com.mk.util.Util;
import com.mk.util.WebSelenium;

/**
 * @author 作者:秋哲 E-mail:2810201146@qq.com:
 * @version 创建时间：2020年8月24日 下午3:29:42
 * @description: 浏览器签到核心脚步
 */
public class Epidemic extends WebSelenium {
	private String urlIndex;
	private String urlTeday;
	private String urlTemperature;
	private User user;


	public Epidemic() {
		urlIndex = "http://ecm.zjvtit.edu.cn:8888/stu-record/index.html";
		urlTeday = "http://ecm.zjvtit.edu.cn:8888/stu-record/ydxxfy/teday.html";
		urlTemperature = "http://ecm.zjvtit.edu.cn:8888/stu-record/ydxxfy/temperature.html";
	}
	
	
	public void go() {
		int errNumber = 0;
		try {
			login();
			try {
				teday();
			} catch (Exception e) {
				errNumber++;
				user.setStateTeday("今日异常");
			}
			try {
				temperature();
			} catch (Exception e) {
				errNumber++;
				user.setStateTemperature("体温异常");
			}
			logOut();
			
		} catch (Exception e1) {
			user.setName(user.getUsername());
			System.out.println("登录页面加载失败");
		}
		
		// 判断是否需要重新执行
		if(errNumber>0) {
			user.runNmber++;
			if(user.runNmber>user.maxRunNmber) {
				user.setRun(false);
			}
		}else {
			user.setRun(false);
		}
		
		
	}


	/**
	 * 体温填报
	 * 
	 * @version 创建时间：2020年8月24日 下午3:58:22
	 * @description
	 * @throws InterruptedException
	 */
	public void temperature() throws InterruptedException {
		web.get(urlTemperature);
		waitElement(".btns");
		int n = 0;
		String m ="#amTemperature";
		String at = getValue(m);
		boolean am = at.equals("") || at == null || at.length() <= 0;
		if (am) {
			sendKeyAndClear(m, ranTemperature());
			n++;
		}
		m = "#pmTemperature";
		getValue(m);
		String pt = getValue(m);
		boolean pm = pt.equals("") || pt == null || pt.length() <= 0;
		if (pm) {
			sendKeyAndClear(m, ranTemperature());
			n++;
		}
		if (n > 0) {
			click(".bot .btns");
			Thread.sleep(1500);
			web.switchTo().alert().accept();
			user.setStateTemperature("完成签到");
			System.out.println(user.getName()+": 体温提交次数="+n);
		}else if(!am || !pm) {
			user.setStateTemperature("已经签到");
		}
	}

	/**
	 * 今日情况
	 * 
	 * @version 创建时间：2020年8月24日 下午3:57:48
	 * @description
	 * @throws InterruptedException
	 */
	public void teday() throws Exception {
		web.get(urlTeday);
		waitElement(".btns");
		waitElement(".infot");
		String t = getText(".infot");
		if (!t.equals("(已填写，可更新)")) {
			click(".bot .btns");
			Thread.sleep(1500);
			web.switchTo().alert().accept();
			user.setStateTeday("完成签到");
			web.get(urlTeday);
		}else {
			user.setStateTeday("已经签到");
		}
	}

	/**
	 * 登录
	 * 
	 * @version 创建时间：2020年8月24日 下午3:36:21
	 * @description
	 */
	public void login() throws Exception {
		web.get(urlIndex);
		waitElement(".loads");
		sendKeyAndClear("#account", user.getUsername());
		sendKeyAndClear("#secretcode",user.getPassword());
		click(".logins .loads");
		waitElement(".infos .t2");
		Thread.sleep(1000);
		String name = getText(".infos .t2");
		
		user.setName(name);
	}
	

	
	
	/**
	 * 初始化用户，从总数据中获取
	 * @version 创建时间：2020年9月9日 下午4:09:56
	 * @description
	 */
	public void initUser(User user) {
		this.user=user;
	}
	
	/**
	 * 退出登录
	 * 
	 * @version 创建时间：2020年8月24日 下午7:32:28
	 * @description
	 */
	public void logOut() {
		// 清除所有的缓存
		web.manage().deleteAllCookies();
		web.get(urlIndex);
	}
	
	public void outAll() {
		web.quit();
	}
	/**
	 * 生成温度
	 * 
	 * @version 创建时间：2020年8月24日 下午3:58:32
	 * @description
	 * @return
	 */
	public  String ranTemperature() {
		String t = "";
		int m = (int) (Math.random() * 2 + 36);
		if (m == 36) {
			int n = (int) (Math.random() * 7 + 2);
			t = m + "." + n;
		}else {
			t=m+"";
		}
		System.out.println(user.getName()+"体温：" + t);
		return t;
	}
	
	/**
	 * 记录当天完成情况
	 * @version 创建时间：2020年9月9日 下午3:59:58
	 * @description  
	 * @throws IOException
	 */
	private void outUserFile() throws IOException {
		Date date = new Date();
		SimpleDateFormat fm = new SimpleDateFormat("yy-MM-dd");
		String time = fm.format(date);
		FileUtils.writeStringToFile(new File("data/" + user.getUsername() + ".log"), "\r" + time + " " + "完成", "UTF-8",true);
	}
	
	public WebDriver getWeb(){
		return this.web;
	}
	
	
	
	/**
	 * 新建一个标签并且 切换为最后一个句柄
	 * 
	 * @version 创建时间：2020年8月25日 上午8:49:33
	 * @description
	 * @param url
	 */
	private void newWindow(String url) {
		Integer code = 0;
		// while (code!=200) {
		// try {
		// n++;
		// Thread.sleep(1000);
		// if(n==5) {
		//// 关闭线程
		//// 重新newWindow
		// return;
		// }
		// System.out.println("页面加载中");
		// } catch (InterruptedException e) {
		// }
		// }
		js.executeScript("window.open('about:blank')");
		ArrayList<String> list = new ArrayList<String>(web.getWindowHandles());
		web.switchTo().window(list.get(list.size() - 1));
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		web.get(url);
		// boolean b=true;
		// do{
		// b = windowOpen(url);
		// }while(!b);
	}

	private boolean windowOpen(String url) {
		int n = 0;
		Thread t = new Thread(() -> {
			web.get(url);
		});
		t.start();
		while (t.isAlive()) {
			try {
				n++;
				Thread.sleep(1000);
				if (n >= 2) {
					t.interrupt();
					web.close();
					return false;
				}
			} catch (InterruptedException e) {
			}
		}
		return true;
	}


	public static void main(String[] args) {
		try {
			new Epidemic().temperature();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

}
